与 Jenkins 集成

Kaspersky Endpoint Security 支持与 Jenkins 集成。Jenkins Pipeline 插件可用于在不同阶段扫描 Docker 映像。例如,您可以在开发期间或发布之前扫描存储库中的 Docker 映像。

要将 Kaspersky Endpoint Security 与 Jenkins 集成:

  1. 请在 Jenkins 节点上安装 Kaspersky Endpoint Security。
  2. 在 Jenkins 节点上安装 Docker Engine。

    有关详细信息,请参见 Docker Engine 文档

  3. 向 Jenkins 用户授予 Kaspersky Endpoint Security 管理员权限:

    kesl-control --grant-role admin <Jenkins 用户名>

  4. 将 Jenkins 用户添加到 docker 组:

    sudo usermod -aG docker <Jenkins 用户名>

    通常使用 jenkins 这一名称。

  5. 在 Jenkins 中,创建一个名为 test 的新构建作业(新建项目输入项目名称)。

    jenkins_create_job

  6. 根据您的需求配置您的项目。假设结果是,您有一个映像或一个已启动的容器需要扫描。
  7. 要启动 Docker 容器,请将以下脚本添加到 Jenkins 构建过程中。如果您使用 Jenkins 插件或其他方式来启动 Docker 容器,请将运行中的 Docker 容器的 ID 保存到 /tmp/kesl_cs_info 文件中,以便进一步扫描:

    TMP_FILE="/tmp/kesl_cs_info"

    EXIT_CODE=0

    echo "Start container from image: '${TEST_CONTAINER_IMAGE}'"

    CONTAINER_ID=$(docker run -d -v /storage:/storage ${TEST_CONTAINER_IMAGE} /storage/docker_process.sh)

    if [ -z "${CONTAINER_ID}" ] ; then

    echo "Cannot start container from image ${TEST_CONTAINER_IMAGE}"

    exit 1

    fi

    echo "${CONTAINER_ID}" > ${TMP_FILE}

    exit ${EXIT_CODE}

    jenkins_contianer_name

  8. 构建工件后,在步骤中添加以下脚本以构建 jenkins。

    对于扫描,此脚本支持一个容器。如有必要,请根据您的需求修改脚本。

    TMP_FILE="/tmp/kesl_cs_info"

    EXIT_CODE=0

    if [ ! -f "${TMP_FILE}" ] ; then

    echo "Cannot find temporary file with container ID: '${TMP_FILE}'"

    exit 1

    fi

    CONTAINER_ID=$(cat ${TMP_FILE})

    if [ -z "${CONTAINER_ID}" ] ; then

    echo "Cannot find container ID in the temporary file: '${TMP_FILE}'"

    exit 1

    fi

    echo "Start anti-virus scan for: '${CONTAINER_ID}'"

    THREATS_AMOUNT=$(kesl-control --scan-container ${CONTAINER_ID}|grep 'Total detected objects'|awk '{print $5}')

    if [ "${THREATS_AMOUNT}" != "0" ] ; then

    echo "ATTENTION! ${THREATS_AMOUNT} threats detected at: '${CONTAINER_ID}'"

    EXIT_CODE=1

    else

    echo "Not threats found"

    fi

    echo "Remove container: {${CONTAINER_ID}}"

    docker kill ${CONTAINER_ID}

    docker rm -f ${CONTAINER_ID}

    rm -f ${TMP_FILE}

  9. 要从存储库中扫描 Docker 映像,请使用以下脚本:

    DOCKER_FILE=https://raw.githubusercontent.com/ianmiell/simple-dockerfile/master/Dockerfile

    DOCKER_FILE_FETCHED=$$.Dockerfile

    TEST_IMAGE_NAME=test_image

    echo "Build image from ${DOCKER_FILE}"

    curl ${DOCKER_FILE} -o ${DOCKER_FILE_FETCHED}

    if [ -f ${DOCKER_FILE_FETCHED} ] ; then

    echo "Dockerfile fetched: ${DOCKER_FILE_FETCHED}"

    else

    echo "Dockerfile not fetched"

    exit 1

    fi

    docker build -f ${DOCKER_FILE_FETCHED} -t ${TEST_IMAGE_NAME} .

    echo "Scan docker image"

    SCAN_RESULT=$(/opt/kaspersky/kesl/bin/kesl-control --scan-container ${TEST_IMAGE_NAME}*)

    echo "Scan done: "

    echo $SCAN_RESULT

  10. 保存构建作业。
页面顶部